<!DOCTYPE html>
<html lang="en">
    <head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <meta name="format-detection" content="telephone=no" />

  <title>
    第四周20201012到20201018日读书汇总 | 迪克猪的博客
  </title>

  
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
  <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
  <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
  <link rel="manifest" href="/manifest.json" />
  <meta name="theme-color" content="#ffffff" />

  
  <link
    rel="stylesheet"
    href="https://unpkg.com/modern-normalize@0.6.0/modern-normalize.css"
  />

  
  
  
  
  <link rel="stylesheet" href="https://zsy619.github.io/style.min.f7761d111b74dd5c07f0111decee92938c12abc42e0fd319e1a07483e248b54e.css" integrity="sha256-93YdERt03VwH8BEd7O6Sk4wSq8QuD9MZ4aB0g&#43;JItU4=" />

  
  
    
  
</head>

    <body>
        <header id="header">
  <div class="header_container">
    <h1 class="sitetitle">
      <a href="https://zsy619.github.io" title="迪克猪的博客">迪克猪的博客</a>
    </h1>
    <nav class="navbar">
      <ul>
        <li><a href="https://zsy619.github.io">Home</a></li>
        
          <li>
            <a href="/post/">
              
              <span>LINUX性能优化</span>
            </a>
          </li>
        
          <li>
            <a href="/csapp/">
              
              <span>深入理解计算机系统_第三版</span>
            </a>
          </li>
        
          <li>
            <a href="/golang/">
              
              <span>golang</span>
            </a>
          </li>
        
          <li>
            <a href="/docker/">
              
              <span>容器</span>
            </a>
          </li>
        
          <li>
            <a href="/flutter/">
              
              <span>Flutter</span>
            </a>
          </li>
        
          <li>
            <a href="/know/">
              
              <span>知识点</span>
            </a>
          </li>
        
          <li>
            <a href="/categories/">
              
              <span>目录</span>
            </a>
          </li>
        
          <li>
            <a href="/about/">
              
              <span>关于</span>
            </a>
          </li>
        
        <li class="hide-sm"><a href="https://zsy619.github.io/index.xml" type="application/rss+xml">RSS</a></li>
      </ul>
    </nav>
  </div>
</header>

        
<section id="main">
  <article class="post content">
    <h2 class="title">第四周20201012到20201018日读书汇总</h2>
    <div class="post_content">
      <h2 id="读书内容">读书内容</h2>
<p>程序的机器表示 章节 3.8~3.12</p>
<h2 id="38-数组访问与分配">3.8 数组访问与分配</h2>
<h3 id="数组定义">数组定义</h3>
<p>数组是某种基本数据类型数据的集合
对于数据类型 T 和整型常数 N，数组的声明如下：</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-c" data-lang="c">T  A[N]
</code></pre></div><p>上面的 A 称为数组名称。它有两个效果：
　　①、它在存储器中分配一个 L*N 字节的连续区域，这里 L 是数据类型 T 的大小（单位为字节）
　　②、A 作为指向数组开头的指针，如果分配的连续区域的起始地址为 xa，那么这个指针的值就是xa</p>
<p>即当用 A[i] 去读取数组元素的时候，其实我们访问的是 xa+i*sizeof(T)。sizeof(T)是获得数据类型T的占用内存大小，以字节为单位，比如如果T为int，那么sizeof(int)就是4。因为数组的下标是从0开始的，当 i等于0时，我们访问的地址就是 xa</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go">
<span style="color:#f92672">package</span> <span style="color:#a6e22e">main</span>

<span style="color:#f92672">import</span> <span style="color:#e6db74">&#34;fmt&#34;</span>

<span style="color:#66d9ef">func</span> <span style="color:#a6e22e">test1</span>() {
	<span style="color:#a6e22e">a</span> <span style="color:#f92672">:=</span> [<span style="color:#ae81ff">10</span>]<span style="color:#66d9ef">int</span>{}
	<span style="color:#66d9ef">for</span> <span style="color:#a6e22e">i</span> <span style="color:#f92672">:=</span> <span style="color:#ae81ff">0</span>; <span style="color:#a6e22e">i</span> &lt; <span style="color:#ae81ff">10</span>; <span style="color:#a6e22e">i</span><span style="color:#f92672">++</span> {
		<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">i</span>, <span style="color:#f92672">&amp;</span><span style="color:#a6e22e">a</span>[<span style="color:#a6e22e">i</span>])
	}
}

</code></pre></div><p>运行结果：</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">0 0xc0000e4000
1 0xc0000e4008
2 0xc0000e4010
3 0xc0000e4018
4 0xc0000e4020
5 0xc0000e4028
6 0xc0000e4030
7 0xc0000e4038
8 0xc0000e4040
9 0xc0000e4048
</code></pre></div><h3 id="数组嵌套">数组嵌套</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go">
<span style="color:#f92672">package</span> <span style="color:#a6e22e">main</span>

<span style="color:#f92672">import</span> <span style="color:#e6db74">&#34;fmt&#34;</span>

<span style="color:#66d9ef">func</span> <span style="color:#a6e22e">test2</span>() {
	<span style="color:#a6e22e">a</span> <span style="color:#f92672">:=</span> [<span style="color:#ae81ff">5</span>][<span style="color:#ae81ff">5</span>]<span style="color:#66d9ef">int</span>{}
	<span style="color:#66d9ef">for</span> <span style="color:#a6e22e">i</span> <span style="color:#f92672">:=</span> <span style="color:#ae81ff">0</span>; <span style="color:#a6e22e">i</span> &lt; <span style="color:#ae81ff">5</span>; <span style="color:#a6e22e">i</span><span style="color:#f92672">++</span> {
		<span style="color:#66d9ef">for</span> <span style="color:#a6e22e">j</span> <span style="color:#f92672">:=</span> <span style="color:#ae81ff">0</span>; <span style="color:#a6e22e">j</span> &lt; <span style="color:#ae81ff">5</span>; <span style="color:#a6e22e">j</span><span style="color:#f92672">++</span> {
			<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">i</span>, <span style="color:#a6e22e">j</span>, <span style="color:#f92672">&amp;</span><span style="color:#a6e22e">a</span>[<span style="color:#a6e22e">i</span>][<span style="color:#a6e22e">j</span>])
		}
	}
}


</code></pre></div><p>运行结果：</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">
0 0 0xc0000e4000
0 1 0xc0000e4008
0 2 0xc0000e4010
0 3 0xc0000e4018
0 4 0xc0000e4020
1 0 0xc0000e4028
1 1 0xc0000e4030
1 2 0xc0000e4038
1 3 0xc0000e4040
1 4 0xc0000e4048
2 0 0xc0000e4050
2 1 0xc0000e4058
2 2 0xc0000e4060
2 3 0xc0000e4068
2 4 0xc0000e4070
3 0 0xc0000e4078
3 1 0xc0000e4080
3 2 0xc0000e4088
3 3 0xc0000e4090
3 4 0xc0000e4098
4 0 0xc0000e40a0
4 1 0xc0000e40a8
4 2 0xc0000e40b0
4 3 0xc0000e40b8
4 4 0xc0000e40c0

</code></pre></div><h2 id="39-异质的数据结构">3.9 异质的数据结构</h2>
<ul>
<li>结构（structure），用关键词struct来声明，将多个对象集合到一个单位中</li>
<li>联合（union），用关键词union来声明，允许用几种不同的类型来引用一个对象</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#66d9ef">const</span> (
	<span style="color:#a6e22e">N</span> = <span style="color:#ae81ff">16</span>
)

<span style="color:#66d9ef">type</span> <span style="color:#a6e22e">fix_matrix</span> [<span style="color:#a6e22e">N</span>][<span style="color:#a6e22e">N</span>]<span style="color:#66d9ef">int</span>

<span style="color:#66d9ef">type</span> <span style="color:#a6e22e">People</span> <span style="color:#66d9ef">struct</span> {
	<span style="color:#a6e22e">Name</span>    <span style="color:#66d9ef">string</span>
	<span style="color:#a6e22e">Sex</span>     <span style="color:#66d9ef">string</span>
	<span style="color:#a6e22e">Age</span>     <span style="color:#66d9ef">int</span>
	<span style="color:#a6e22e">Address</span> <span style="color:#66d9ef">string</span>
}

<span style="color:#66d9ef">type</span> <span style="color:#a6e22e">Student</span> <span style="color:#66d9ef">struct</span> {
	<span style="color:#a6e22e">People</span>
	<span style="color:#a6e22e">Attribute</span> <span style="color:#66d9ef">int</span>
}
</code></pre></div><h2 id="310-在机器级程序中将控制与数据结合起来">3.10 在机器级程序中将控制与数据结合起来</h2>
<ul>
<li>指针是C语言的一个核心特色，它提供了一种统一方式，对不同数据结构中的元素产生引用。</li>
<li>每个指针都对应一个类型，void *类型代表通用指针，它通过强制或隐式类型转换变成一个有类型的指针。</li>
<li>每个指针都有一个值，NULL(0)值表示指针没有指向任何地方。</li>
<li>指针用&amp;操作符创建。</li>
<li>*操作符用于间接引用指针。</li>
<li>数组与指针紧密联系。</li>
<li>将指针从一种类型强制转换为另一种类型，只改变它的类型而不改变它的值，效果只是改变指针- 运算的伸缩。</li>
<li>指针也可以指向函数。</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#f92672">package</span> <span style="color:#a6e22e">main</span>

<span style="color:#f92672">import</span> <span style="color:#e6db74">&#34;net/http&#34;</span>

<span style="color:#66d9ef">type</span> <span style="color:#a6e22e">starInt</span> <span style="color:#f92672">*</span><span style="color:#66d9ef">int</span>

<span style="color:#66d9ef">type</span> <span style="color:#a6e22e">handler</span> <span style="color:#f92672">*</span><span style="color:#66d9ef">func</span>(<span style="color:#a6e22e">http</span>.<span style="color:#a6e22e">ResponseWriter</span>, <span style="color:#f92672">*</span><span style="color:#a6e22e">http</span>.<span style="color:#a6e22e">Request</span>)
</code></pre></div><h2 id="311-浮点代码">3.11 浮点代码</h2>
<p>处理器的浮点体系结构包括多个方面，会影响对浮点数据操作的程序如何被映射到机器上，包括：
1） 如何存储和访问浮点数据。通常是通过某种寄存器方式来完成。
2） 对浮点数据操作的指令。
3） 想函数传递浮点数参数和从函数返回浮点数结构的规则。
4） 函数调用过程保持寄存器的规则——例如，一些寄存器被指定为调用者保存，而其他的被指定为被调用者保存。</p>
<p><img src="../../images/20201018-1126-13.png" alt=""></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#f92672">package</span> <span style="color:#a6e22e">main</span>

<span style="color:#66d9ef">func</span> <span style="color:#a6e22e">float_mov</span>(<span style="color:#a6e22e">v1</span> <span style="color:#66d9ef">float32</span>, <span style="color:#a6e22e">src</span>, <span style="color:#a6e22e">dest</span> <span style="color:#f92672">*</span><span style="color:#66d9ef">float32</span>) <span style="color:#66d9ef">float32</span> {
	<span style="color:#a6e22e">v2</span> <span style="color:#f92672">:=</span> <span style="color:#f92672">*</span><span style="color:#a6e22e">src</span>
	<span style="color:#a6e22e">dest</span> = <span style="color:#f92672">&amp;</span><span style="color:#a6e22e">v1</span>
	<span style="color:#66d9ef">return</span> <span style="color:#a6e22e">v2</span>
}
</code></pre></div><p>把浮点值转换成整数时，指令会执行截断（truncation）</p>

    </div>
    <div class="info post_meta">
      <time datetime=2020-10-18T10:30:21&#43;0800 class="date">Sunday, October 18, 2020</time>
      
        <ul class="tags">
        
          <li> <a href="https://zsy619.github.io/tags/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F">深入理解计算机系统</a> </li>
        
        </ul>
      
      
    </div>
    <div class="clearfix"></div>
  </article>
  
    <div class="other_posts">
      
      <a href="https://zsy619.github.io/csapp/20200928%E5%88%B020201011%E6%97%A5%E8%AF%BB%E4%B9%A6%E6%B1%87%E6%80%BB-%E7%AC%AC%E4%B8%89%E5%91%A8/" class="prev">第三周20200928到20201011日读书汇总</a>
      
      
      <a href="https://zsy619.github.io/csapp/20201019%E5%88%B020201025%E6%97%A5%E8%AF%BB%E4%B9%A6%E6%B1%87%E6%80%BB-%E7%AC%AC%E4%BA%94%E5%91%A8/" class="next">20201019到20201025日读书汇总--第五周</a>
      
    </div>
    <aside id="comments">
</aside>

  
</section>

        <a id="back_to_top" title="Go To Top" href="#">
  <span>
    <svg viewBox="0 0 24 24">
      <path fill="none" d="M0 0h24v24H0z"></path>
      <path d="M12 2L4.5 20.29l.71.71L12 18l6.79 3 .71-.71z"></path>
    </svg>
  </span>
</a>

        <footer id="footer">
  <p>
    <span>&copy; 2021 <a href="https://zsy619.github.io" title="迪克猪的博客">迪克猪的博客</a> </span>
    <span>Built with <a rel="nofollow" target="_blank" href="https://gohugo.io">Hugo</a></span>
    <span>Theme by <a rel="nofollow" target="_blank" href="https://github.com/wayjam/hugo-theme-mixedpaper">WayJam</a></span>
  </p>

  <script src="https://zsy619.github.io/js/main.min.8b182175f5874aeed0acc0979345c98d4bde22208ec4f36cc1d6e3102acb4b10.js" integrity="sha256-ixghdfWHSu7QrMCXk0XJjUveIiCOxPNswdbjECrLSxA=" crossorigin="anonymous" async></script>
</footer>

    </body>
</html>
